#include <iostream>
#include <cstdio>
#include <Server.h>

using namespace std;

Server::Server() : isActive(true)
{
	log = Logger::getInstance();

	c = new RequestHandler;
	if (!c && log)
		log->log(INFO, "[Server] No se pudo crear RequestHanlder");

	log->log(INFO, "[Server] Inicializado");
}

Server::~Server() {
}

bool Server::active() {
	return isActive;
}

void Server::run() {
	if (!c) {
		return;
	}

	log->log(INFO, "[Server] Esperando mensaje");
	cola.leer(1, &buffer);
	log->log(INFO, "[Server] Mensaje leido de la cola");

	log->log(INFO, "[Server] Procesando mensaje");
	mensaje_st reply = c->proccessMessage(&buffer);
	log->log(INFO, "[Server] Mensaje procesado");

	log->log(INFO, "[Server] Respondiendo mensaje");
	cola.escribir(&reply);
	log->log(INFO, "[Server] Mensaje respondido");
}

void Server::end() {
	if (isActive) {
		log->log(INFO, "[Server] Finaliza");
		cola.destruir();
		if (c)
			delete c;
		isActive = false;
	}
}

